public class demo1 {
    public int numDecodings(String s) {
        //注意逻辑和代码复杂度
        char[]arr=s.toCharArray();
        int n=s.length();
        if(n==1&&arr[0]=='0')return 0;
        if(n==1&&arr[0]!='0')return 1;
        int []dp=new int[n];
        if(arr[0]=='0') {
            dp[0]=0;
            dp[1]=0;
        }
        else {
            if(arr[1]=='0') {
                if(((arr[0]-'0')*10+arr[1]-'0')>=10&&((arr[0]-'0')*10+arr[1]-'0')<=26){
                    dp[1]=1;
                    dp[0]=1;
                }else {
                    dp[1]=0;
                    dp[0]=0;
                }
            }else {
                if(((arr[0]-'0')*10+arr[1]-'0')>=10&&((arr[0]-'0')*10+arr[1]-'0')<=26){
                    dp[1]=2;
                    dp[0]=1;
                }else {
                    dp[1]=1;
                    dp[0]=1;
                }
            }
        }
        for(int i=2;i<n;i++) {
            if(arr[i]!='0')
                dp[i]+=dp[i-1];
            if(((arr[i-1]-'0')*10+arr[i]-'0')>=10&&((arr[i-1]-'0')*10+arr[i]-'0')<=26){
                dp[i]+=dp[i-2];
            }

        }
        return dp[n-1];
    }
}
